package com.example.pei.papa.task;

import android.os.AsyncTask;

import com.example.pei.papa.listener.compressPicturesListener;

import static com.example.pei.papa.utils.PictureUtil.compressImage;

/**
 * Created by Pei on 2017/11/14.
 */

public class compressPicturesTask extends AsyncTask<String ,Integer,Integer> {

    public static final int STATE_SUCCESS=0;
    public static final int STATE_FAILED=1;

    private compressPicturesListener listerner;

    public compressPicturesTask(compressPicturesListener listerner) {
        this.listerner=listerner;
    }

    //在后台任务执行之前调用，用于界面上的一些初始化操作，比如显示一个进度条对话框等
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    //当后台任务执行完毕并通过return进行返回时，这个方法很快就被调用。返回的参数作为参数传递到此
    //方法中，可以利用返回的数据进行一些UI操作，比如提醒任务执行的结果，以及关闭掉进度条对话框等
    @Override
    protected void onPostExecute(Integer state) {
       switch (state){
           case STATE_SUCCESS:
               listerner.onSuccess();
               break;
           case STATE_FAILED:
                listerner.onFailed();
                break;
       }
    }

    //当后台任务调用了publishProgress(Progress...)方法后，这个方法就很快被调用，该方法中携带的
    //参数就是后台任务中传递过来的。在这个方法中可以对UI进行操作，利用参数中的数值就可以对界面元
    //素进行相应的更新
    @Override
    protected void onProgressUpdate(Integer... values) {

    }



    //这个方法中的所有代码都会在子线程中运行，我们应该在这里处理所有耗时的任务。任务一旦完成就可以
    //通过return语句来将任务的执行结果返回，如果AsnycTask的第三个泛型参数指定的事Void，就可以不反
    //回任务执行结果。注意，在这个方法中是不可以进行UI操作的，如果需要更新UI元素，比如说反馈当前任
    //务的执行进度，可以调用publishProgress(Progress...)方法来完成

    @Override
    protected Integer doInBackground(String... strings) {

        //将String转int
        int size=10240;
        try {
            size = Integer.parseInt(strings[2]);
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }

        compressImage(strings[0], strings[1], size);
        return STATE_SUCCESS;
    }
}
